// @ts-nocheck
import axios from 'axios'
import {ElLoading, ElMessage} from "element-plus";
import {showMessage} from "@/api/status";


// 创建一个 axios 实例
const milliaAxios = axios.create({
    timeout: 60000, // 请求超时时间毫秒
    withCredentials: true, // 异步请求携带cookie
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    }
})

//拦截器 请求拦截
milliaAxios.interceptors.request.use(
    config => {

        if (config.showLoading !== false) { // 可以传递 showLoading: false 来禁用特定请求的加载指示器
            config.loadingInstance = ElLoading.service({
                lock: true,
                text: 'Loading...',
                background: 'rgba(0, 0, 0, 0.7)',
            }); // 将loading实例添加到请求配置中
        }

        // 排除登录和注册等部分接口
        const white_url = {
            'loginPath': '/api/user/login/',
            'registerPath': '/api/user/register',
            'smsPath': '/api/user/register/send_sms_code',
            'pwdPath': '/api/user/forgetpwd',
        }


        // 获取请求的URL路径
        const pathname = config.url;
        console.log('当前的请求路径：', pathname)

        // 检查当前请求是否在白名单中
        let isWhiteListed = false;
        for (const path in white_url) {
            if (pathname.includes(white_url[path])) {
                isWhiteListed = true;
                break;
            }
        }

        // 如果不在白名单中，则添加认证头部
        if (!isWhiteListed) {
            // 添加JWT认证头部
            const accessToken = localStorage.getItem('authToken');
            console.log('JWT：',accessToken);
            if (accessToken) {
                config.headers['Authorization'] = `Bearer ${accessToken}`;
            }

            // 添加CSRF认证头部
            const csrfToken = localStorage.getItem('csrfToken');
            if (csrfToken) {
                console.log('csrfToken：', csrfToken);
                config.headers['X-CSRFToken'] = csrfToken;
            }
        }

        return config;
        }, error => {
    console.log(error)
    return Promise.reject(error);
    });


//拦截器 响应拦截
milliaAxios.interceptors.response.use(
    response => {
        // 只有当响应的请求配置中有 loadingInstance 时才尝试关闭
        if (response.config && response.config.loadingInstance) {
            response.config.loadingInstance.close(); // 关闭loading
        }

        return response
    },
    error => {
        if (error.config && error.config.loadingInstance) {
            error.config.loadingInstance.close(); // 关闭loading
        }
        if (error.response) {
            // 请求已发出，但是服务器响应的状态码不在2xx的范围
            console.log(error.response)
            const message = showMessage(error.response.status);  // 传入响应码，匹配响应码对应信息
            ElMessage.warning(message);
            return Promise.reject(error.data);
        } else {
            ElMessage.warning('网络连接异常，请稍后再试！')
        }
});

// 封装 GET POST 请求并导出
export function axios_request(url = '', params = {}, type = '') {

    return new Promise((resolve, reject) => {
        let promise
        if (type.toUpperCase() === 'GET') {
            promise = milliaAxios({
                method: "GET",
                url,
                data: params
            })
        } else if (type.toUpperCase() === 'POST') {
            promise = milliaAxios({
                method: 'POST',
                url,
                data: params
            })
        }
        //处理返回
        promise.then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}


export default milliaAxios